#include <iostream>
#include <vector>
#include<unistd.h>
#include"Mutex.hpp"
using namespace LockMutex;

int ticketnum = 1000; // 共享资源
#define NUM 4

Mutex mtx;//构建锁对象

void* Ticket(void* args)
{
    while (true)
    {
        //while代码块位置定义临时对象，进来就构造，出代码块就析构。
        //这个就是临界区，RAII风格
        mutex_lock s(mtx);

        // 多线程判断或修改共享资源，都是临界区
        if (ticketnum > 0)
        {
            usleep(1000);
            // 抢票
            printf("抢票,id:%d\n", ticketnum--);

            // 模拟入库
        }
        else
        {

            break;
        }


    }
    return nullptr;
}

int main()
{
    // 1.构建线程对象
    pthread_t t1,t2,t3,t4;

    pthread_create(&t1,nullptr,Ticket,(void*)"Ticket-1");
    pthread_create(&t2,nullptr,Ticket,(void*)"Ticket-2");
    pthread_create(&t3,nullptr,Ticket,(void*)"Ticket-3");
    pthread_create(&t4,nullptr,Ticket,(void*)"Ticket-4");

    pthread_join(t1,nullptr);
    pthread_join(t2,nullptr);
    pthread_join(t3,nullptr);
    pthread_join(t4,nullptr);

    return 0;
}